package br.com.autoleal.cliente.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;

import br.com.autoleal.veiculo.entity.Veiculo;

@Entity
@NamedQueries({ 
	@NamedQuery(name = "Cliente.buscarTodos", query = "SELECT c FROM Cliente c"),
	@NamedQuery(name = "Cliente.buscarCodigoMax", query = "SELECT max(c.codigo) FROM Cliente c"),
	@NamedQuery(name = "Cliente.buscarTodosNome", query = "SELECT c FROM Cliente C WHERE c.apelido LIKE :apelido")
})
@Inheritance(strategy = InheritanceType.JOINED)
public class Cliente implements Serializable {

	private static final long serialVersionUID = -167598681360932873L;

	@Id
	@GeneratedValue
	private Long id;

	@Column(name = "apelido", nullable = false)
	private String apelido;

	@Column(name = "codigo", nullable = false)
	private String codigo;

	@Column(name = "telefone1", nullable = false)
	private String telefone1;

	@Column(name = "telefone2", nullable = true)
	private String telefone2;

	@Column(name = "endereco", nullable = true)
	private String endereco;

	@Column(name = "cidade", nullable = true)
	private String cidade;

	@Column(name = "uf", nullable = true)
	private String uf;

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "cliente", targetEntity = Veiculo.class)
	private List<Veiculo> veiculos;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getApelido() {
		return apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	public String getTelefone1() {
		return telefone1;
	}

	public void setTelefone1(String telefone1) {
		this.telefone1 = telefone1;
	}

	public String getTelefone2() {
		return telefone2;
	}

	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public List<Veiculo> getVeiculos() {
		return veiculos;
	}

	public void setVeiculos(List<Veiculo> veiculos) {
		this.veiculos = veiculos;
	}

	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
}